<template>
    <li>
        <label>
            <input
                type="checkbox"
                :checked="todo.done"
                @change="handleCheck(todo.id)"
            />
            <!-- 以下代码也可以实现，不过不建议（修改了props内容） -->
            <!-- <input type="checkbox" v-model="tood.done" /> -->
            <span v-show="!todo.isEdit">{{ todo.title }}</span>
            <input
                type="text"
                v-show="todo.isEdit"
                :value="todo.title"
                @blur="handleBlur(todo, $event)"
            />
        </label>
        <button class="btn btn-danger" @click="handleDelete(todo.id)">
            删除
        </button>
        <button
            v-show="!todo.isEdit"
            class="btn btn-edit"
            @click="handleEdit(todo)"
            ref="inputTitle"
        >
            编辑
        </button>
    </li>
</template>

<script>
import pubsub from "pubsub-js";
export default {
    name: "TdItem",
    props: ["todo"],
    methods: {
        //勾选or取消勾选
        handleCheck(id) {
            //console.log(id);
            //通知App组件将对应的todo对象的done值取反
            // this.checkTodo(id);
            this.$bus.$emit("checkTodo", id);
        },
        //删除
        handleDelete(id) {
            //console.log(id);
            if (confirm("确定删除吗？")) {
                //确定 进入
                // this.deleteTodo(id);
                // this.$bus.$emit("deleteTodo", id);
                pubsub.publish("deleteTodo", id);
            }
        },
        //编辑
        handleEdit(todo) {
            if (Object.prototype.hasOwnProperty.call(todo, "isEdit")) {
                todo.isEdit = true;
            } else {
                this.$set(todo, "isEdit", true);
            }
            this.$nextTick(function () {
                this.$refs.inputTitle.focus();
            });
        },
        handleBlur(todo, e) {
            todo.isEdit = false;
            if (!e.target.value.trim()) return alert("输入不能为空");
            this.$bus.$emit("updateTodo", todo.id, e.target.value);
        },
    },
};
</script>

<style scoped>
/*item*/
li {
    list-style: none;
    height: 36px;
    line-height: 36px;
    padding: 0 5px;
    border-bottom: 1px solid #ddd;
}

li label {
    float: left;
    cursor: pointer;
}

li label li input {
    vertical-align: middle;
    margin-right: 6px;
    position: relative;
    top: -1px;
}

li button {
    float: right;
    display: none;
    margin-top: 3px;
}

li:before {
    content: initial;
}

li:last-child {
    border-bottom: none;
}

li:hover {
    background-color: #ddd;
}

li:hover button {
    display: block;
}
</style>